#ifndef __NODO_RESULTADO_H__
#define __NODO_RESULTADO_H__

#include "alumno.h"
#include "Lista.h"
#include "descriptor_alumno.h"

class NodoResultado {

private:

	DescriptorAlumno descriptor;
	bool valorDescriptor;
	Lista<Alumno*>* alumnos;
	Lista<NodoResultado*>* hijos;

public:

	/**
	 * Postcondiciones: El nodo queda creado con desriptor PROMEDIO_MAYOR_A_CUATRO,
	 *                  con valorDescriptor en false, alumnos e hijos apuntando a NULL.
	 */
	NodoResultado();

	/**
	 * Postcondiciones: Se elimina el nodo, su lista de hijos (incluyendo sus nodos)
	 *                  y su lista de alumnos (no los alumnos).
	 */
	~NodoResultado();

	/**
	 * Postcondiciones: El nodo resultado queda creado con los mismos valores que el
	 *                  que se utilizo para su construccion.
	 */
	NodoResultado(const NodoResultado&);

	/**
	 * Precondiciones: El nodo asignado no puede ser un hijo de este.
	 * Postcondiciones: El nodo queda con los mismos valores que el indicado.
	 *                  Si ya tenia alumnos no se eliminan, pero se remueven.
	 *                  Si ya tenia hijos se eliminan.
	 */
	NodoResultado& operator=(const NodoResultado&);

	/**
	 * Precondiciones: El desriptor debe ser valido.
	 * Postcondiciones: El descriptor queda seteado en el indicado.
	 */
	void setDesriptor(DescriptorAlumno);

	/**
	 * Postcondiciones: Retorna el descriptor.
	 */
	DescriptorAlumno  getDescriptor();

	/**
	 * Postcondiciones: El valor del descriptor queda seteado en el indicado.
	 */
	void setValorDescriptor(bool);

	/**
	 * Postcondiciones: Retorta el valor del descriptor.
	 */
	bool getValorDescriptor();

	/**
	 * Precondiciones: La lista debe exisitir.
	 * Postcondiciones: La lista de alumnos queda seteada en la indicada.
	 */
	void setListaAlumnos(Lista<Alumno*>*);

	/**
	 * Postcondiciones: Retorna la lista de alumnos.
	 */
	Lista<Alumno*>* getListaAlumnos();

	/**
	 * Precondiciones: La lista debe exisitir.
	 * Postcondiciones: La lista de hijos queda seteada en la indicada.
	 */
	void setListaHijos(Lista<NodoResultado*>*);

	/**
	 * Postcondiciones: Retorna la lista de hijos.
	 */
	Lista<NodoResultado*>* getListaHijos();

};

#endif /* __NODO_RESULTADO_H__ */
